#!/usr/bin/env python
# -*- coding: UTF8 	-*-

from GladeConnect import GladeConnect
import gtk
import sys
import time
import datetime
import dialogos
import debugwindow
import SimpleTree
import ifd
from strSQL.basicas import strSelectMovimientoEstanque
from psycopg2 import connect
import completion
import comunes
import treetohtml

(FECHA,
 PORCENTAJE,
 VOLUMEN,
 MOVIMIENTO,
 CODIGO_ORIGEN,
 CODIGO_DESTINO,
 ORIGEN,
 DESTINO,
 SALDO,
 CODIGO_ESTANQUE_ORIGEN,
 CODIGO_ESTANQUE_DESTINO,
 HORA,
 RENDIMIENTO) = range(13)

class wnMovimientoEstanque(GladeConnect):
    def __init__(self, conexion=None, padre=None, root="wnCosechado"):
        GladeConnect.__init__(self, "glade/wnCosechado.glade", root)
        self.cnx = conexion
        self.cursor = self.cnx.cursor()
        self.padre = padre
        if padre is None :
            self.wnCosechado.maximize()
            self.frm_padre = self.wnCosechado
            self.padre 
        else:
            self.frm_padre = padre.frm_padre
        
        self.crea_filtro()
        self.clipboard = gtk.clipboard_get(gtk.gdk.SELECTION_CLIPBOARD)
        
        self.pecOrigen = completion.CompletionEstanque(self.entOrigen,
                self.sel_origen,
                self.cnx)
        
        self.destino = None
        self.origen = None
        
        self.crea_columnas()

    def sel_origen(self, completion, model, iter):
        self.origen = model.get_value(iter, 1)
        
    def crea_filtro(self):
        self.frame = gtk.Frame("Filtro")
        self.hboxBusqueda.pack_start(self.frame)
        
        hb = gtk.HBox(spacing=6)
        self.frame.add(hb)
        hb1 = gtk.HBox(spacing=6)
        hb.pack_start(hb1)
        self.entOrigen = gtk.Entry()
        hb1.pack_start(gtk.Label("Cuba:"), False, False)
        hb1.pack_start(self.entOrigen)
        self.hboxBusqueda.show_all()

    def crea_columnas(self):
        columnas = []
        columnas.append ([FECHA, "Fecha", "dte"])
        columnas.append ([HORA, "Hora", "time"])
        columnas.append ([PORCENTAJE, "Porcentaje", "str"])
        columnas.append ([VOLUMEN, "Volumen", "str"])
        columnas.append ([MOVIMIENTO, "Movimiento", "str"])
        columnas.append ([CODIGO_ORIGEN, "Código Origen", "str"])
        columnas.append ([CODIGO_DESTINO, "Código Destino", "str"])
        columnas.append ([ORIGEN, "Origen", "str"])
        columnas.append ([DESTINO, "Destino", "str"])
        columnas.append ([SALDO, "Saldo", "str"])
        self.columnas = columnas
       
        self.modelo = gtk.ListStore(*(12*[str]))
        SimpleTree.GenColsByModel(self.modelo, columnas, self.treeCosechado)
        self.col_data = [(x[0],x[2]) for x in columnas]
        
    def on_btnImprimir_clicked(self, btn=None):
        t = treetohtml.TreeToHTML(self.treeCosechado,"Movimientos", self.col_data)
        t.show()
        
    def carga_datos(self):
        sql = strSelectMovimientoEstanque
        where = ""

        if not self.origen is None:
            where =  """ where ((code_a = %s or code_b = %s) and tipo < 10) or
            (code_b = %s and tipo = 10) """ % (self.origen, self.origen, self.origen)
        
        sql = sql.replace("order", where + " order ")
        
        self.modelo = ifd.ListStoreFromSQL(self.cnx, sql)
        saldo = 0
        co = -1
        for i in self.modelo:
            if co <> i[CODIGO_ORIGEN]:
                co = i[CODIGO_ORIGEN]
            if i[CODIGO_ESTANQUE_DESTINO] == self.origen and i[CODIGO_ESTANQUE_ORIGEN] == self.origen:
                if i[MOVIMIENTO] != "Mezcla a Mezcla" or i[MOVIMIENTO] != "Fermentacion a Fermentacion":
                    saldo = float(i[VOLUMEN])
            elif i[CODIGO_ESTANQUE_DESTINO] == self.origen:
                if i[MOVIMIENTO] == "Fermentacion a Mezcla":
                    saldo += float(i[VOLUMEN])*(float(i[RENDIMIENTO])/100)
                else:
                    saldo += float(i[VOLUMEN])
            elif i[CODIGO_ESTANQUE_ORIGEN] == self.origen:
                saldo -= float(i[VOLUMEN])
            if saldo <= 0:
                saldo = 0
            saldo = round(saldo)
            i[SALDO] = saldo
            i[VOLUMEN] = round(float(i[VOLUMEN]))
            i[PORCENTAJE] = round(float(i[PORCENTAJE]))
        self.treeCosechado.set_model(self.modelo)
        
    def on_btnRefrescar_clicked(self, btn=None):
        if self.modelo is None:
            return
        self.modelo.clear()
        self.carga_datos()
        
        
    def on_btnCopiar_clicked(self, btn=None):
        enc = ""
        for i in self.columnas:
            enc += "%s\t" % i[1]
        data = enc + "\n"
        for i in self.modelo:
            linea = ""
            for j in self.columnas:
                try:
                    valor = float(i[j[0]])
                    valor = valor.replace(".", ",")
                except:
                    valor = i[j[0]]
                linea += "%s\t" % valor
            data += linea + "\n"
        self.clipboard.set_text(data)
        self.clipboard.store()
        
        
    def on_btnCerrar_clicked(self, btn=None):
        if self.padre is None:
            self.on_exit()
        else:
            self.padre.remove_tab("Movimientos por Estanque")
            
if __name__ == '__main__':
    cnx = connect("dbname=traza user=traza password=123 host=localhost")
    #cnx.autocommit()
    sys.excepthook = debugwindow.show
    d = wnMovimientoEstanque(cnx)
    
    gtk.main()
